{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "8fe19b15",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy\n",
    "import matplotlib.pyplot as plt\n",
    "from pandas import read_csv\n",
    "import math\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense\n",
    "from keras.layers import LSTM\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "from sklearn.metrics import mean_squared_error\n",
    "from pandas import concat\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d273afaa",
   "metadata": {},
   "outputs": [],
   "source": [
    "from pandas import read_csv\n",
    "from datetime import datetime\n",
    "# load data\n",
    "dataset = read_csv('td13_add_new.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "8f931387",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "         ����ʱ��  ���й����ʣ�kw��  ����״��  ����¶�  ����¶�.1  �����������  \\\n",
      "0  2018/1/1 0:00     244033.7682      2.0    22.0      12.0          1.0   \n",
      "1  2018/1/1 0:15     232720.6402      2.0    22.0      12.0          1.0   \n",
      "2  2018/1/1 0:30     231685.6891      2.0    22.0      12.0          1.0   \n",
      "3  2018/1/1 0:45     227581.3317      2.0    22.0      12.0          1.0   \n",
      "4  2018/1/1 1:00     233482.4269      2.0    22.0      12.0          1.0   \n",
      "\n",
      "   ҹ����������  ��  ��.1  Сʱ  һ��ڼ���  һ��ڼ���.1  weekday  ʱ���  ����  �Ƿ��³�  \\\n",
      "0          1.0   1     1   0        1          1        0     1     1       1   \n",
      "1          1.0   1     1   0        1          1        0     1     1       1   \n",
      "2          1.0   1     1   0        1          1        0     1     1       1   \n",
      "3          1.0   1     1   0        1          1        0     1     1       1   \n",
      "4          1.0   1     1   1        1          1        0     1     1       1   \n",
      "\n",
      "   �Ƿ���ĩ  �Ƿ񼾽ڳ�  �Ƿ񼾽�ĩ  �Ƿ���ĩ.1  \n",
      "0       0      1      0         0  \n",
      "1       0      1      0         0  \n",
      "2       0      1      0         0  \n",
      "3       0      1      0         0  \n",
      "4       0      1      0         0  \n"
     ]
    }
   ],
   "source": [
    "print(dataset.head(5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "2543c3f1",
   "metadata": {},
   "outputs": [],
   "source": [
    "# manually specify column names\n",
    "#dataset.drop('Unnamed: 0 ', axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "82c5bfba",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "         ����ʱ��  ���й����ʣ�kw��  ����״��  ����¶�  ����¶�.1  �����������  \\\n",
      "0  2018/1/1 0:00     244033.7682      2.0    22.0      12.0          1.0   \n",
      "1  2018/1/1 0:15     232720.6402      2.0    22.0      12.0          1.0   \n",
      "2  2018/1/1 0:30     231685.6891      2.0    22.0      12.0          1.0   \n",
      "3  2018/1/1 0:45     227581.3317      2.0    22.0      12.0          1.0   \n",
      "4  2018/1/1 1:00     233482.4269      2.0    22.0      12.0          1.0   \n",
      "\n",
      "   ҹ����������  ��  ��.1  Сʱ  һ��ڼ���  һ��ڼ���.1  weekday  ʱ���  ����  �Ƿ��³�  \\\n",
      "0          1.0   1     1   0        1          1        0     1     1       1   \n",
      "1          1.0   1     1   0        1          1        0     1     1       1   \n",
      "2          1.0   1     1   0        1          1        0     1     1       1   \n",
      "3          1.0   1     1   0        1          1        0     1     1       1   \n",
      "4          1.0   1     1   1        1          1        0     1     1       1   \n",
      "\n",
      "   �Ƿ���ĩ  �Ƿ񼾽ڳ�  �Ƿ񼾽�ĩ  �Ƿ���ĩ.1  \n",
      "0       0      1      0         0  \n",
      "1       0      1      0         0  \n",
      "2       0      1      0         0  \n",
      "3       0      1      0         0  \n",
      "4       0      1      0         0  \n"
     ]
    }
   ],
   "source": [
    "print(dataset.head(5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "b9af4d79",
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset.columns = ['time','总有功功率 （kw）','天气状况','最高温度','最低温度','白天风力风向','夜晚风力风向','月','天','小时','一年第几天','一年第几周','weekday','时间段','季节','是否月初','是否月末','是否季节初','是否季节末','是否周末']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "7424ebc2",
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset.drop('time', axis=1, inplace=True)\n",
    "# summarize first 5 rows\n",
    "#print(dataset.head(5))\n",
    "# save to file\n",
    "dataset.to_csv('power.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "3a01e663",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "         总有功功率 （kw）  天气状况  最高温度  最低温度  白天风力风向  夜晚风力风向   月   天  小时  一年第几天  \\\n",
      "0       244033.7682  2.00  22.0  12.0     1.0     1.0   1   1   0      1   \n",
      "1       232720.6402  2.00  22.0  12.0     1.0     1.0   1   1   0      1   \n",
      "2       231685.6891  2.00  22.0  12.0     1.0     1.0   1   1   0      1   \n",
      "3       227581.3317  2.00  22.0  12.0     1.0     1.0   1   1   0      1   \n",
      "4       233482.4269  2.00  22.0  12.0     1.0     1.0   1   1   1      1   \n",
      "...             ...   ...   ...   ...     ...     ...  ..  ..  ..    ...   \n",
      "137275  188526.9574  1.15  22.5  14.2    20.4    17.4  11  30   0    334   \n",
      "137276  202457.0970  1.15  22.5  14.2    20.4    17.4  11  30   0    334   \n",
      "137277  185634.1142  1.15  22.5  14.2    20.4    17.4  11  30   0    334   \n",
      "137278  184531.0964  1.15  22.5  14.2    20.4    17.4  11  30   0    334   \n",
      "137279  184605.9313  1.15  22.5  14.2    20.4    17.4  11  30   0    334   \n",
      "\n",
      "        一年第几周  weekday  时间段  季节  是否月初  是否月末  是否季节初  是否季节末  是否周末  \n",
      "0           1        0    1   1     1     0      1      0     0  \n",
      "1           1        0    1   1     1     0      1      0     0  \n",
      "2           1        0    1   1     1     0      1      0     0  \n",
      "3           1        0    1   1     1     0      1      0     0  \n",
      "4           1        0    1   1     1     0      1      0     0  \n",
      "...       ...      ...  ...  ..   ...   ...    ...    ...   ...  \n",
      "137275     48        1    1   4     0     1      0      0     0  \n",
      "137276     48        1    1   4     0     1      0      0     0  \n",
      "137277     48        1    1   4     0     1      0      0     0  \n",
      "137278     48        1    1   4     0     1      0      0     0  \n",
      "137279     48        1    1   4     0     1      0      0     0  \n",
      "\n",
      "[137280 rows x 19 columns]\n"
     ]
    }
   ],
   "source": [
    "print(dataset)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "4c4e13a4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<bound method NDFrame.head of         var1(t-1)  var2(t-1)  var3(t-1)  var4(t-1)  var5(t-1)  var6(t-1)  \\\n",
      "1        0.672707    0.12500   0.483871   0.346154   0.000000   0.000000   \n",
      "2        0.643219    0.12500   0.483871   0.346154   0.000000   0.000000   \n",
      "3        0.640521    0.12500   0.483871   0.346154   0.000000   0.000000   \n",
      "4        0.629823    0.12500   0.483871   0.346154   0.000000   0.000000   \n",
      "5        0.645205    0.12500   0.483871   0.346154   0.000000   0.000000   \n",
      "...           ...        ...        ...        ...        ...        ...   \n",
      "137275   0.530375    0.01875   0.500000   0.430769   0.710526   0.713044   \n",
      "137276   0.528027    0.01875   0.500000   0.430769   0.710526   0.713044   \n",
      "137277   0.564336    0.01875   0.500000   0.430769   0.710526   0.713044   \n",
      "137278   0.520487    0.01875   0.500000   0.430769   0.710526   0.713044   \n",
      "137279   0.517612    0.01875   0.500000   0.430769   0.710526   0.713044   \n",
      "\n",
      "        var7(t-1)  var8(t-1)  var9(t-1)  var10(t-1)  var11(t-1)  var12(t-1)  \\\n",
      "1        0.000000   0.000000   0.000000    0.000000    0.000000    0.000000   \n",
      "2        0.000000   0.000000   0.000000    0.000000    0.000000    0.000000   \n",
      "3        0.000000   0.000000   0.000000    0.000000    0.000000    0.000000   \n",
      "4        0.000000   0.000000   0.000000    0.000000    0.000000    0.000000   \n",
      "5        0.000000   0.000000   0.043478    0.000000    0.000000    0.000000   \n",
      "...           ...        ...        ...         ...         ...         ...   \n",
      "137275   0.909091   0.966667   0.000000    0.912329    0.903846    0.166667   \n",
      "137276   0.909091   0.966667   0.000000    0.912329    0.903846    0.166667   \n",
      "137277   0.909091   0.966667   0.000000    0.912329    0.903846    0.166667   \n",
      "137278   0.909091   0.966667   0.000000    0.912329    0.903846    0.166667   \n",
      "137279   0.909091   0.966667   0.000000    0.912329    0.903846    0.166667   \n",
      "\n",
      "        var13(t-1)  var14(t-1)  var15(t-1)  var16(t-1)  var17(t-1)  \\\n",
      "1              0.0         0.0         1.0         0.0         1.0   \n",
      "2              0.0         0.0         1.0         0.0         1.0   \n",
      "3              0.0         0.0         1.0         0.0         1.0   \n",
      "4              0.0         0.0         1.0         0.0         1.0   \n",
      "5              0.0         0.0         1.0         0.0         1.0   \n",
      "...            ...         ...         ...         ...         ...   \n",
      "137275         0.0         1.0         0.0         1.0         0.0   \n",
      "137276         0.0         1.0         0.0         1.0         0.0   \n",
      "137277         0.0         1.0         0.0         1.0         0.0   \n",
      "137278         0.0         1.0         0.0         1.0         0.0   \n",
      "137279         0.0         1.0         0.0         1.0         0.0   \n",
      "\n",
      "        var18(t-1)  var19(t-1)   var1(t)  \n",
      "1              0.0         0.0  0.643219  \n",
      "2              0.0         0.0  0.640521  \n",
      "3              0.0         0.0  0.629823  \n",
      "4              0.0         0.0  0.645205  \n",
      "5              0.0         0.0  0.621700  \n",
      "...            ...         ...       ...  \n",
      "137275         0.0         0.0  0.528027  \n",
      "137276         0.0         0.0  0.564336  \n",
      "137277         0.0         0.0  0.520487  \n",
      "137278         0.0         0.0  0.517612  \n",
      "137279         0.0         0.0  0.517807  \n",
      "\n",
      "[137279 rows x 20 columns]>\n"
     ]
    }
   ],
   "source": [
    "# prepare data for lstm\n",
    "from pandas import DataFrame\n",
    "from pandas import concat\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "\n",
    "# convert series to supervised learning\n",
    "def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):\n",
    "    n_vars = 1 if type(data) is list else data.shape[1]\n",
    "    df = DataFrame(data)\n",
    "    cols, names = list(), list()\n",
    "    # input sequence (t-n, ... t-1)\n",
    "    for i in range(n_in, 0, -1):\n",
    "        cols.append(df.shift(i))\n",
    "        names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]\n",
    "    # forecast sequence (t, t+1, ... t+n)\n",
    "    for i in range(0, n_out):\n",
    "        cols.append(df.shift(-i))\n",
    "        if i == 0:\n",
    "            names += [('var%d(t)' % (j+1)) for j in range(n_vars)]\n",
    "        else:\n",
    "            names += [('var%d(t+%d)' % (j+1, i)) for j in range(n_vars)]\n",
    "    # put it all together\n",
    "    agg = concat(cols, axis=1)\n",
    "    agg.columns = names\n",
    "    # drop rows with NaN values\n",
    "    if dropnan:\n",
    "        agg.dropna(inplace=True)\n",
    "    return agg\n",
    "\n",
    "# load dataset\n",
    "dataset = read_csv('power.csv', header=0, index_col=0)\n",
    "values = dataset.values\n",
    "# integer encode direction\n",
    "encoder = LabelEncoder()\n",
    "values[:,4] = encoder.fit_transform(values[:,4])\n",
    "# ensure all data is float\n",
    "values = values.astype('float32')\n",
    "# normalize features\n",
    "scaler = MinMaxScaler(feature_range=(0, 1))\n",
    "scaled = scaler.fit_transform(values)\n",
    "# frame as supervised learning\n",
    "reframed = series_to_supervised(scaled, 1, 1)\n",
    "# drop columns we don't want to predict\n",
    "reframed.drop(reframed.columns[[20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37]], axis=1, inplace=True)\n",
    "#print(reframed.head())\n",
    "print(reframed.head)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "31d34811",
   "metadata": {},
   "outputs": [],
   "source": [
    "#plt.plot(reframed)\n",
    "#plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "b8a051ee",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(128543, 1, 19) (128543,) (8736, 1, 19) (8736,)\n"
     ]
    }
   ],
   "source": [
    "...\n",
    "# split into train and test sets\n",
    "values = reframed.values\n",
    "n_train_hours = int(len(reframed)-91*96)\n",
    "train = values[:n_train_hours, :]\n",
    "test = values[n_train_hours:, :]\n",
    "# split into input and outputs\n",
    "train_X, train_y = train[:, :-1], train[:, -1]\n",
    "test_X, test_y = test[:, :-1], test[:, -1]\n",
    "# reshape input to be 3D [samples, timesteps, features]\n",
    "train_X = train_X.reshape((train_X.shape[0], 1, train_X.shape[1]))\n",
    "test_X = test_X.reshape((test_X.shape[0], 1, test_X.shape[1]))\n",
    "print(train_X.shape, train_y.shape, test_X.shape, test_y.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "f1dfb13d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/100\n",
      "1786/1786 - 3s - loss: 0.0576 - val_loss: 0.0414 - 3s/epoch - 2ms/step\n",
      "Epoch 2/100\n",
      "1786/1786 - 2s - loss: 0.0336 - val_loss: 0.0265 - 2s/epoch - 989us/step\n",
      "Epoch 3/100\n",
      "1786/1786 - 2s - loss: 0.0288 - val_loss: 0.0253 - 2s/epoch - 1ms/step\n",
      "Epoch 4/100\n",
      "1786/1786 - 2s - loss: 0.0279 - val_loss: 0.0253 - 2s/epoch - 1ms/step\n",
      "Epoch 5/100\n",
      "1786/1786 - 2s - loss: 0.0273 - val_loss: 0.0249 - 2s/epoch - 1ms/step\n",
      "Epoch 6/100\n",
      "1786/1786 - 2s - loss: 0.0269 - val_loss: 0.0242 - 2s/epoch - 1ms/step\n",
      "Epoch 7/100\n",
      "1786/1786 - 2s - loss: 0.0266 - val_loss: 0.0240 - 2s/epoch - 1ms/step\n",
      "Epoch 8/100\n",
      "1786/1786 - 2s - loss: 0.0263 - val_loss: 0.0239 - 2s/epoch - 1ms/step\n",
      "Epoch 9/100\n",
      "1786/1786 - 2s - loss: 0.0262 - val_loss: 0.0237 - 2s/epoch - 1ms/step\n",
      "Epoch 10/100\n",
      "1786/1786 - 2s - loss: 0.0260 - val_loss: 0.0237 - 2s/epoch - 993us/step\n",
      "Epoch 11/100\n",
      "1786/1786 - 2s - loss: 0.0259 - val_loss: 0.0237 - 2s/epoch - 989us/step\n",
      "Epoch 12/100\n",
      "1786/1786 - 2s - loss: 0.0258 - val_loss: 0.0237 - 2s/epoch - 992us/step\n",
      "Epoch 13/100\n",
      "1786/1786 - 2s - loss: 0.0257 - val_loss: 0.0237 - 2s/epoch - 983us/step\n",
      "Epoch 14/100\n",
      "1786/1786 - 2s - loss: 0.0255 - val_loss: 0.0237 - 2s/epoch - 975us/step\n",
      "Epoch 15/100\n",
      "1786/1786 - 2s - loss: 0.0253 - val_loss: 0.0237 - 2s/epoch - 964us/step\n",
      "Epoch 16/100\n",
      "1786/1786 - 2s - loss: 0.0252 - val_loss: 0.0237 - 2s/epoch - 979us/step\n",
      "Epoch 17/100\n",
      "1786/1786 - 2s - loss: 0.0250 - val_loss: 0.0237 - 2s/epoch - 999us/step\n",
      "Epoch 18/100\n",
      "1786/1786 - 2s - loss: 0.0248 - val_loss: 0.0237 - 2s/epoch - 1ms/step\n",
      "Epoch 19/100\n",
      "1786/1786 - 2s - loss: 0.0247 - val_loss: 0.0237 - 2s/epoch - 966us/step\n",
      "Epoch 20/100\n",
      "1786/1786 - 2s - loss: 0.0245 - val_loss: 0.0238 - 2s/epoch - 992us/step\n",
      "Epoch 21/100\n",
      "1786/1786 - 2s - loss: 0.0241 - val_loss: 0.0252 - 2s/epoch - 995us/step\n",
      "Epoch 22/100\n",
      "1786/1786 - 2s - loss: 0.0238 - val_loss: 0.0266 - 2s/epoch - 996us/step\n",
      "Epoch 23/100\n",
      "1786/1786 - 2s - loss: 0.0238 - val_loss: 0.0273 - 2s/epoch - 982us/step\n",
      "Epoch 24/100\n",
      "1786/1786 - 2s - loss: 0.0239 - val_loss: 0.0271 - 2s/epoch - 962us/step\n",
      "Epoch 25/100\n",
      "1786/1786 - 2s - loss: 0.0240 - val_loss: 0.0273 - 2s/epoch - 951us/step\n",
      "Epoch 26/100\n",
      "1786/1786 - 2s - loss: 0.0241 - val_loss: 0.0269 - 2s/epoch - 951us/step\n",
      "Epoch 27/100\n",
      "1786/1786 - 2s - loss: 0.0241 - val_loss: 0.0266 - 2s/epoch - 964us/step\n",
      "Epoch 28/100\n",
      "1786/1786 - 2s - loss: 0.0242 - val_loss: 0.0265 - 2s/epoch - 980us/step\n",
      "Epoch 29/100\n",
      "1786/1786 - 2s - loss: 0.0242 - val_loss: 0.0266 - 2s/epoch - 973us/step\n",
      "Epoch 30/100\n",
      "1786/1786 - 2s - loss: 0.0243 - val_loss: 0.0268 - 2s/epoch - 973us/step\n",
      "Epoch 31/100\n",
      "1786/1786 - 2s - loss: 0.0243 - val_loss: 0.0269 - 2s/epoch - 966us/step\n",
      "Epoch 32/100\n",
      "1786/1786 - 2s - loss: 0.0243 - val_loss: 0.0272 - 2s/epoch - 951us/step\n",
      "Epoch 33/100\n",
      "1786/1786 - 2s - loss: 0.0243 - val_loss: 0.0274 - 2s/epoch - 953us/step\n",
      "Epoch 34/100\n",
      "1786/1786 - 2s - loss: 0.0243 - val_loss: 0.0276 - 2s/epoch - 994us/step\n",
      "Epoch 35/100\n",
      "1786/1786 - 2s - loss: 0.0242 - val_loss: 0.0277 - 2s/epoch - 1ms/step\n",
      "Epoch 36/100\n",
      "1786/1786 - 2s - loss: 0.0242 - val_loss: 0.0280 - 2s/epoch - 1000us/step\n",
      "Epoch 37/100\n",
      "1786/1786 - 2s - loss: 0.0242 - val_loss: 0.0281 - 2s/epoch - 977us/step\n",
      "Epoch 38/100\n",
      "1786/1786 - 2s - loss: 0.0241 - val_loss: 0.0282 - 2s/epoch - 1ms/step\n",
      "Epoch 39/100\n",
      "1786/1786 - 2s - loss: 0.0241 - val_loss: 0.0282 - 2s/epoch - 941us/step\n",
      "Epoch 40/100\n",
      "1786/1786 - 2s - loss: 0.0240 - val_loss: 0.0283 - 2s/epoch - 928us/step\n",
      "Epoch 41/100\n",
      "1786/1786 - 2s - loss: 0.0239 - val_loss: 0.0283 - 2s/epoch - 968us/step\n",
      "Epoch 42/100\n",
      "1786/1786 - 2s - loss: 0.0238 - val_loss: 0.0284 - 2s/epoch - 1ms/step\n",
      "Epoch 43/100\n",
      "1786/1786 - 2s - loss: 0.0238 - val_loss: 0.0283 - 2s/epoch - 1ms/step\n",
      "Epoch 44/100\n",
      "1786/1786 - 2s - loss: 0.0238 - val_loss: 0.0283 - 2s/epoch - 1ms/step\n",
      "Epoch 45/100\n",
      "1786/1786 - 2s - loss: 0.0237 - val_loss: 0.0283 - 2s/epoch - 959us/step\n",
      "Epoch 46/100\n",
      "1786/1786 - 2s - loss: 0.0237 - val_loss: 0.0282 - 2s/epoch - 991us/step\n",
      "Epoch 47/100\n",
      "1786/1786 - 2s - loss: 0.0236 - val_loss: 0.0279 - 2s/epoch - 1ms/step\n",
      "Epoch 48/100\n",
      "1786/1786 - 2s - loss: 0.0235 - val_loss: 0.0280 - 2s/epoch - 1ms/step\n",
      "Epoch 49/100\n",
      "1786/1786 - 2s - loss: 0.0234 - val_loss: 0.0279 - 2s/epoch - 1ms/step\n",
      "Epoch 50/100\n",
      "1786/1786 - 2s - loss: 0.0234 - val_loss: 0.0278 - 2s/epoch - 1ms/step\n",
      "Epoch 51/100\n",
      "1786/1786 - 2s - loss: 0.0233 - val_loss: 0.0277 - 2s/epoch - 1ms/step\n",
      "Epoch 52/100\n",
      "1786/1786 - 2s - loss: 0.0232 - val_loss: 0.0276 - 2s/epoch - 1ms/step\n",
      "Epoch 53/100\n",
      "1786/1786 - 2s - loss: 0.0231 - val_loss: 0.0275 - 2s/epoch - 1ms/step\n",
      "Epoch 54/100\n",
      "1786/1786 - 2s - loss: 0.0230 - val_loss: 0.0274 - 2s/epoch - 1ms/step\n",
      "Epoch 55/100\n",
      "1786/1786 - 2s - loss: 0.0229 - val_loss: 0.0272 - 2s/epoch - 1ms/step\n",
      "Epoch 56/100\n",
      "1786/1786 - 2s - loss: 0.0229 - val_loss: 0.0271 - 2s/epoch - 1ms/step\n",
      "Epoch 57/100\n",
      "1786/1786 - 2s - loss: 0.0228 - val_loss: 0.0271 - 2s/epoch - 993us/step\n",
      "Epoch 58/100\n",
      "1786/1786 - 2s - loss: 0.0228 - val_loss: 0.0270 - 2s/epoch - 1ms/step\n",
      "Epoch 59/100\n",
      "1786/1786 - 2s - loss: 0.0227 - val_loss: 0.0271 - 2s/epoch - 1ms/step\n",
      "Epoch 60/100\n",
      "1786/1786 - 2s - loss: 0.0227 - val_loss: 0.0270 - 2s/epoch - 1ms/step\n",
      "Epoch 61/100\n",
      "1786/1786 - 2s - loss: 0.0227 - val_loss: 0.0270 - 2s/epoch - 959us/step\n",
      "Epoch 62/100\n",
      "1786/1786 - 2s - loss: 0.0226 - val_loss: 0.0269 - 2s/epoch - 956us/step\n",
      "Epoch 63/100\n",
      "1786/1786 - 2s - loss: 0.0226 - val_loss: 0.0269 - 2s/epoch - 966us/step\n",
      "Epoch 64/100\n",
      "1786/1786 - 2s - loss: 0.0225 - val_loss: 0.0269 - 2s/epoch - 996us/step\n",
      "Epoch 65/100\n",
      "1786/1786 - 2s - loss: 0.0224 - val_loss: 0.0270 - 2s/epoch - 977us/step\n",
      "Epoch 66/100\n",
      "1786/1786 - 2s - loss: 0.0224 - val_loss: 0.0270 - 2s/epoch - 993us/step\n",
      "Epoch 67/100\n",
      "1786/1786 - 2s - loss: 0.0224 - val_loss: 0.0270 - 2s/epoch - 982us/step\n",
      "Epoch 68/100\n",
      "1786/1786 - 2s - loss: 0.0224 - val_loss: 0.0270 - 2s/epoch - 1ms/step\n",
      "Epoch 69/100\n",
      "1786/1786 - 2s - loss: 0.0225 - val_loss: 0.0269 - 2s/epoch - 996us/step\n",
      "Epoch 70/100\n",
      "1786/1786 - 2s - loss: 0.0224 - val_loss: 0.0270 - 2s/epoch - 1ms/step\n",
      "Epoch 71/100\n",
      "1786/1786 - 2s - loss: 0.0223 - val_loss: 0.0270 - 2s/epoch - 1ms/step\n",
      "Epoch 72/100\n",
      "1786/1786 - 2s - loss: 0.0223 - val_loss: 0.0271 - 2s/epoch - 1ms/step\n",
      "Epoch 73/100\n",
      "1786/1786 - 2s - loss: 0.0222 - val_loss: 0.0271 - 2s/epoch - 997us/step\n",
      "Epoch 74/100\n",
      "1786/1786 - 2s - loss: 0.0220 - val_loss: 0.0272 - 2s/epoch - 990us/step\n",
      "Epoch 75/100\n",
      "1786/1786 - 2s - loss: 0.0220 - val_loss: 0.0274 - 2s/epoch - 1ms/step\n",
      "Epoch 76/100\n",
      "1786/1786 - 2s - loss: 0.0219 - val_loss: 0.0275 - 2s/epoch - 1ms/step\n",
      "Epoch 77/100\n",
      "1786/1786 - 2s - loss: 0.0220 - val_loss: 0.0277 - 2s/epoch - 1ms/step\n",
      "Epoch 78/100\n",
      "1786/1786 - 2s - loss: 0.0219 - val_loss: 0.0278 - 2s/epoch - 1ms/step\n",
      "Epoch 79/100\n",
      "1786/1786 - 2s - loss: 0.0220 - val_loss: 0.0281 - 2s/epoch - 975us/step\n",
      "Epoch 80/100\n",
      "1786/1786 - 2s - loss: 0.0218 - val_loss: 0.0283 - 2s/epoch - 962us/step\n",
      "Epoch 81/100\n",
      "1786/1786 - 2s - loss: 0.0219 - val_loss: 0.0286 - 2s/epoch - 962us/step\n",
      "Epoch 82/100\n",
      "1786/1786 - 2s - loss: 0.0218 - val_loss: 0.0289 - 2s/epoch - 980us/step\n",
      "Epoch 83/100\n",
      "1786/1786 - 2s - loss: 0.0218 - val_loss: 0.0290 - 2s/epoch - 985us/step\n",
      "Epoch 84/100\n",
      "1786/1786 - 2s - loss: 0.0218 - val_loss: 0.0294 - 2s/epoch - 957us/step\n",
      "Epoch 85/100\n",
      "1786/1786 - 2s - loss: 0.0218 - val_loss: 0.0295 - 2s/epoch - 951us/step\n",
      "Epoch 86/100\n",
      "1786/1786 - 2s - loss: 0.0218 - val_loss: 0.0298 - 2s/epoch - 944us/step\n",
      "Epoch 87/100\n",
      "1786/1786 - 2s - loss: 0.0218 - val_loss: 0.0299 - 2s/epoch - 950us/step\n",
      "Epoch 88/100\n",
      "1786/1786 - 2s - loss: 0.0217 - val_loss: 0.0302 - 2s/epoch - 966us/step\n",
      "Epoch 89/100\n",
      "1786/1786 - 2s - loss: 0.0218 - val_loss: 0.0302 - 2s/epoch - 970us/step\n",
      "Epoch 90/100\n",
      "1786/1786 - 2s - loss: 0.0216 - val_loss: 0.0304 - 2s/epoch - 963us/step\n",
      "Epoch 91/100\n",
      "1786/1786 - 2s - loss: 0.0217 - val_loss: 0.0306 - 2s/epoch - 974us/step\n",
      "Epoch 92/100\n",
      "1786/1786 - 2s - loss: 0.0216 - val_loss: 0.0307 - 2s/epoch - 961us/step\n",
      "Epoch 93/100\n",
      "1786/1786 - 2s - loss: 0.0216 - val_loss: 0.0308 - 2s/epoch - 966us/step\n",
      "Epoch 94/100\n",
      "1786/1786 - 2s - loss: 0.0215 - val_loss: 0.0310 - 2s/epoch - 983us/step\n",
      "Epoch 95/100\n",
      "1786/1786 - 2s - loss: 0.0215 - val_loss: 0.0310 - 2s/epoch - 976us/step\n",
      "Epoch 96/100\n",
      "1786/1786 - 2s - loss: 0.0214 - val_loss: 0.0312 - 2s/epoch - 973us/step\n",
      "Epoch 97/100\n",
      "1786/1786 - 2s - loss: 0.0214 - val_loss: 0.0314 - 2s/epoch - 966us/step\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 98/100\n",
      "1786/1786 - 2s - loss: 0.0213 - val_loss: 0.0314 - 2s/epoch - 974us/step\n",
      "Epoch 99/100\n",
      "1786/1786 - 2s - loss: 0.0214 - val_loss: 0.0316 - 2s/epoch - 997us/step\n",
      "Epoch 100/100\n",
      "1786/1786 - 2s - loss: 0.0213 - val_loss: 0.0316 - 2s/epoch - 1ms/step\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "...\n",
    "# design network\n",
    "model = Sequential()\n",
    "model.add(LSTM(50, input_shape=(train_X.shape[1], train_X.shape[2])))\n",
    "model.add(Dense(1))\n",
    "model.compile(loss='mae', optimizer='adam')\n",
    "# fit network\n",
    "history = model.fit(train_X, train_y, epochs=100, batch_size=72, validation_data=(test_X, test_y), verbose=2, shuffle=False)\n",
    "# plot history\n",
    "plt.plot(history.history['loss'], label='train')\n",
    "plt.plot(history.history['val_loss'], label='test')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "64a0d2b0",
   "metadata": {},
   "outputs": [],
   "source": [
    "# make predictions\n",
    "#trainPredict = model.predict(train_X)\n",
    "#testPredict = model.predict(test_X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "7c7a3607",
   "metadata": {},
   "outputs": [],
   "source": [
    "...\n",
    "# make a prediction\n",
    "yhat = model.predict(test_X)\n",
    "test_X = test_X.reshape((test_X.shape[0], test_X.shape[2]))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "2e095d4f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(8736, 1) (8736, 19)\n"
     ]
    }
   ],
   "source": [
    "yhat=DataFrame(yhat)\n",
    "test_X=DataFrame(test_X)\n",
    "print(yhat.shape,test_X.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "f5b552e4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "      <th>13</th>\n",
       "      <th>14</th>\n",
       "      <th>15</th>\n",
       "      <th>16</th>\n",
       "      <th>17</th>\n",
       "      <th>18</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.560584</td>\n",
       "      <td>1.00000</td>\n",
       "      <td>0.806452</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.947368</td>\n",
       "      <td>0.913043</td>\n",
       "      <td>0.636364</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.663014</td>\n",
       "      <td>0.653846</td>\n",
       "      <td>0.166667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.581699</td>\n",
       "      <td>0.34375</td>\n",
       "      <td>0.877419</td>\n",
       "      <td>0.909615</td>\n",
       "      <td>0.605263</td>\n",
       "      <td>0.669565</td>\n",
       "      <td>0.727273</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.665753</td>\n",
       "      <td>0.653846</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.568715</td>\n",
       "      <td>0.34375</td>\n",
       "      <td>0.877419</td>\n",
       "      <td>0.909615</td>\n",
       "      <td>0.605263</td>\n",
       "      <td>0.669565</td>\n",
       "      <td>0.727273</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.665753</td>\n",
       "      <td>0.653846</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.568211</td>\n",
       "      <td>0.34375</td>\n",
       "      <td>0.877419</td>\n",
       "      <td>0.909615</td>\n",
       "      <td>0.605263</td>\n",
       "      <td>0.669565</td>\n",
       "      <td>0.727273</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.665753</td>\n",
       "      <td>0.653846</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.567525</td>\n",
       "      <td>0.34375</td>\n",
       "      <td>0.877419</td>\n",
       "      <td>0.909615</td>\n",
       "      <td>0.605263</td>\n",
       "      <td>0.669565</td>\n",
       "      <td>0.727273</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.665753</td>\n",
       "      <td>0.653846</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8731</th>\n",
       "      <td>0.542528</td>\n",
       "      <td>0.01875</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.430769</td>\n",
       "      <td>0.710526</td>\n",
       "      <td>0.713044</td>\n",
       "      <td>0.909091</td>\n",
       "      <td>0.966667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.912329</td>\n",
       "      <td>0.903846</td>\n",
       "      <td>0.166667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8732</th>\n",
       "      <td>0.541916</td>\n",
       "      <td>0.01875</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.430769</td>\n",
       "      <td>0.710526</td>\n",
       "      <td>0.713044</td>\n",
       "      <td>0.909091</td>\n",
       "      <td>0.966667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.912329</td>\n",
       "      <td>0.903846</td>\n",
       "      <td>0.166667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8733</th>\n",
       "      <td>0.551537</td>\n",
       "      <td>0.01875</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.430769</td>\n",
       "      <td>0.710526</td>\n",
       "      <td>0.713044</td>\n",
       "      <td>0.909091</td>\n",
       "      <td>0.966667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.912329</td>\n",
       "      <td>0.903846</td>\n",
       "      <td>0.166667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8734</th>\n",
       "      <td>0.539962</td>\n",
       "      <td>0.01875</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.430769</td>\n",
       "      <td>0.710526</td>\n",
       "      <td>0.713044</td>\n",
       "      <td>0.909091</td>\n",
       "      <td>0.966667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.912329</td>\n",
       "      <td>0.903846</td>\n",
       "      <td>0.166667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8735</th>\n",
       "      <td>0.539221</td>\n",
       "      <td>0.01875</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.430769</td>\n",
       "      <td>0.710526</td>\n",
       "      <td>0.713044</td>\n",
       "      <td>0.909091</td>\n",
       "      <td>0.966667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.912329</td>\n",
       "      <td>0.903846</td>\n",
       "      <td>0.166667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>8736 rows × 19 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "            0        1         2         3         4         5         6   \\\n",
       "0     0.560584  1.00000  0.806452  0.884615  0.947368  0.913043  0.636364   \n",
       "1     0.581699  0.34375  0.877419  0.909615  0.605263  0.669565  0.727273   \n",
       "2     0.568715  0.34375  0.877419  0.909615  0.605263  0.669565  0.727273   \n",
       "3     0.568211  0.34375  0.877419  0.909615  0.605263  0.669565  0.727273   \n",
       "4     0.567525  0.34375  0.877419  0.909615  0.605263  0.669565  0.727273   \n",
       "...        ...      ...       ...       ...       ...       ...       ...   \n",
       "8731  0.542528  0.01875  0.500000  0.430769  0.710526  0.713044  0.909091   \n",
       "8732  0.541916  0.01875  0.500000  0.430769  0.710526  0.713044  0.909091   \n",
       "8733  0.551537  0.01875  0.500000  0.430769  0.710526  0.713044  0.909091   \n",
       "8734  0.539962  0.01875  0.500000  0.430769  0.710526  0.713044  0.909091   \n",
       "8735  0.539221  0.01875  0.500000  0.430769  0.710526  0.713044  0.909091   \n",
       "\n",
       "            7    8         9         10        11   12        13   14   15  \\\n",
       "0     1.000000  1.0  0.663014  0.653846  0.166667  0.0  0.666667  0.0  1.0   \n",
       "1     0.000000  0.0  0.665753  0.653846  0.333333  0.0  0.666667  1.0  0.0   \n",
       "2     0.000000  0.0  0.665753  0.653846  0.333333  0.0  0.666667  1.0  0.0   \n",
       "3     0.000000  0.0  0.665753  0.653846  0.333333  0.0  0.666667  1.0  0.0   \n",
       "4     0.000000  0.0  0.665753  0.653846  0.333333  0.0  0.666667  1.0  0.0   \n",
       "...        ...  ...       ...       ...       ...  ...       ...  ...  ...   \n",
       "8731  0.966667  0.0  0.912329  0.903846  0.166667  0.0  1.000000  0.0  1.0   \n",
       "8732  0.966667  0.0  0.912329  0.903846  0.166667  0.0  1.000000  0.0  1.0   \n",
       "8733  0.966667  0.0  0.912329  0.903846  0.166667  0.0  1.000000  0.0  1.0   \n",
       "8734  0.966667  0.0  0.912329  0.903846  0.166667  0.0  1.000000  0.0  1.0   \n",
       "8735  0.966667  0.0  0.912329  0.903846  0.166667  0.0  1.000000  0.0  1.0   \n",
       "\n",
       "       16   17   18  \n",
       "0     0.0  0.0  0.0  \n",
       "1     0.0  0.0  0.0  \n",
       "2     0.0  0.0  0.0  \n",
       "3     0.0  0.0  0.0  \n",
       "4     0.0  0.0  0.0  \n",
       "...   ...  ...  ...  \n",
       "8731  0.0  0.0  0.0  \n",
       "8732  0.0  0.0  0.0  \n",
       "8733  0.0  0.0  0.0  \n",
       "8734  0.0  0.0  0.0  \n",
       "8735  0.0  0.0  0.0  \n",
       "\n",
       "[8736 rows x 19 columns]"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_X[0]=yhat\n",
    "test_X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "02cb65cc",
   "metadata": {},
   "outputs": [],
   "source": [
    "inv_yhat = scaler.inverse_transform(test_X)\n",
    "inv_yhat = inv_yhat[:,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "887968dc",
   "metadata": {},
   "outputs": [],
   "source": [
    "# invert scaling for actual\n",
    "test_y = test_y.reshape((len(test_y), 1))\n",
    "test_X[0]=test_y\n",
    "inv_y = scaler.inverse_transform(test_X)\n",
    "inv_y = inv_y[:,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "64783e5b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test Score: 15109.746\n"
     ]
    }
   ],
   "source": [
    "# calculate RMSE\n",
    "from math import sqrt\n",
    "#trainScore = sqrt(mean_squared_error(train_y[0], inv_yhat[0]))\n",
    "#print('Train Score: %.3f RMSE' % (trainScore))\n",
    "rmse2 = sqrt(mean_squared_error(inv_y, inv_yhat))\n",
    "print('Test Score: %.3f' % rmse2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "1c22321c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([210161.97, 198264.28, 197798.58, ..., 185634.11, 184531.11,\n",
       "       184605.95], dtype=float32)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inv_y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "227db62c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "8736 8736\n"
     ]
    }
   ],
   "source": [
    "print(len(inv_y),len(inv_yhat))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "a388d8c6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([201017.6 , 209118.45, 204136.94, ..., 197546.72, 193106.05,\n",
       "       192821.62], dtype=float32)"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inv_yhat"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "3314d790",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MAPE: 0.05577283\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from sklearn import metrics\n",
    "def mape(y_true, y_pred):\n",
    "    return np.mean(np.abs((y_pred - y_true) / y_true))\n",
    "print('MAPE:',mape(inv_y, inv_yhat))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "1f9a9a20",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "R2-score: 0.5139100586940618\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import r2_score\n",
    "print('R2-score:',r2_score(inv_y, inv_yhat))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "27b1d1c5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x20315ec85b0>]"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(inv_yhat,'r')\n",
    "plt.plot(inv_y,'b')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "334e9396",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "inv_yhat = pd.DataFrame(inv_yhat)\n",
    "inv_yhat.to_csv('prediction_8736.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "dd2fd5d6",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
